#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k,t,ans=0;
int f[101][101];
struct gang
{
	int t,p,s;
}g[101];
int cmp(gang a,gang b)
{
	return a.t<b.t;
}

int max(int x,int y)
{
	return x>y?x:y;
}
int min(int x,int y)
{
	return x<y?x:y;
}
int main()
{
//	freopen("gangster.09","r",stdin);
	scanf("%d%d%d",&n,&k,&t);
	for(int i=1;i<=n;i++)
		scanf("%d",&g[i].t);
	for(int i=1;i<=n;i++)
		scanf("%d",&g[i].p);
	for(int i=1;i<=n;i++)
		scanf("%d",&g[i].s);
	g[0].t=0;g[0].p=100000;
	sort(g,g+n+1,cmp);
	//memset(f,0,sizeof(f));
	for(int i=1;i<=n;i++)
		for(int j=0;j<=k;j++)f[i][j]=-1;
	for(int i=1;i<=n;i++)
	if(g[i].t>=g[i].s)ans=f[i][g[i].s]=0;
	for(int i=1;i<=n;i++)
		for(int j=0;j<=k;j++)
		{
			for(int w=1;w<i;w++)
			{
			    int c=g[i].t-g[w].t;
				for(int q=max(j-c,0);q<=min(j+c,k);q++)
				   f[i][j]=max(f[i][j],f[w][q]);
			}
			if(g[i].s==j&&g[i].t>=g[i].s)f[i][j]+=g[i].p;
			ans=max(ans,f[i][j]);
		}
	printf("%d\n",ans);
	return 0;
}
